/*
 * Universidad del Valle de Guatemala
 * Algoritmos y Estructuras de Datos
 * Hoja de Trabajo 6 - HojadeTrabajo6.java
 * Luis Jose Pinillos, carnet No.12523
 * Jose Roberto Ruano, carnet No.12101
 * Pablo Jose Chevac, carnet No.12331
 */
package hojadetrabajo6;


import java.util.*;

public class HojadeTrabajo6 {

    /**
     * @param args the command line arguments
     */
    
    // Seleccionar la implementacion que se utilizara.
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int elec = 0;
        int submenu = 0;
        String usuario = "";
        String resultado = "";
        SetFactory<String> sFactory = new SetFactory<String>();
        while(elec != 4){
            System.out.println("Bienvenido al programa de clasificacion de desarrolladores");
            System.out.println("Ingrese la opcion del menu deseada");
            System.out.println("1. Utilizar HashSet");
            System.out.println("2. Utilizar LinkedHashSet");
            System.out.println("3. Utilizar TreeSet");
            System.out.println("4. Salir");

            elec = sc.nextInt();
            if(elec==1){
                //Si se selecciono utilizar HashSet
                Set<String> Web = sFactory.getSet(elec);
                Set<String> Java = sFactory.getSet(elec);
                Set<String> Cel = sFactory.getSet(elec);
                
                //Seleccionar el grupo de desarrolladores al que se agregara el nuevo usuario o mostrar los resultados
                while(submenu != 5){
                    System.out.println("Ingrese la opcion que desea realizar");
                    System.out.println("1. Agregar usuario a Desarrollador Web");
                    System.out.println("2. Agregar usuario a Desarrollador Java");
                    System.out.println("3. Agregar usuario a Desarrollador Celulares");
                    System.out.println("4. Mostrar Resultados");
                    System.out.println("5. Salir");

                    submenu = sc.nextInt();
                    sc.nextLine();
                    //Si se selecciono desarrollador web
                    if(submenu == 1){
                        System.out.println("Ingrese el nombre del usuario");
                        usuario = sc.nextLine();
                        Web.add(usuario);
                    }
                    //Si se selecciono desarrollador java
                    else if(submenu == 2){
                        System.out.println("Ingrese el nombre del usuario");
                        usuario = sc.nextLine();
                        Java.add(usuario);
                    }
                    //Si se selecciono desarrollador de celulares
                    else if(submenu == 3){
                        System.out.println("Ingrese el nombre del usuario");
                        usuario = sc.nextLine();
                        Cel.add(usuario);
                    }
                    // Mostrar los resultados
                    else if(submenu == 4){
                        System.out.println("Desarrolladores web, java y celulares");
                        for(String str : Web){
                            if(Java.contains(str) && Cel.contains(str)){
                                resultado += str + "\n";
                            }                        
                        }
                        System.out.println(resultado);
                        
                        System.out.println("Desarrolladores con experiencia en java, sin experiencia en web");
                        resultado = "";
                        for(String str : Java){
                            if(Web.contains(str)==false){
                                resultado += str + "\n";
                            }                        
                        }
                        System.out.println(resultado);
                        
                        System.out.println("Desarrolladores con experiencia en web y celulares");
                        resultado = "";
                        for(String str : Web){
                            if(Cel.contains(str)){
                                resultado += str + "\n";
                            }                        
                        }
                        System.out.println(resultado);
                        
                        System.out.println("Desarrolladores con experiencia web o celulares y sin experiencia en java");
                        resultado = "";
                        for(String str : Web){
                            if(Java.contains(str)==false){
                                resultado += str + "\n";
                            }                        
                        }
                        for(String str : Cel){
                            if(Java.contains(str)==false){
                                resultado += str + "\n";
                            }
                        }
                        System.out.println(resultado);
                        
                        if(Web.containsAll(Java)){
                            System.out.println("El conjunto de desarrolladores de Java es un subconjunto de los desarrolladores Web");
                        }
                        else{
                            System.out.println("El conjunto de desarrolladores de Java no es un subconjunto de los desarrolladores Web");
                        }
                        
                        System.out.println("El conjunto de desarrolladores mas grande es:");
                        resultado = "";
                        if(Web.size()>Java.size() && Web.size()>Cel.size()){
                            resultado += "Desarrolladores Web \n";
                            for(String str : Web){
                                resultado += str + "\n";
                            }
                            System.out.println(resultado);
                        }
                        else if(Java.size()>Web.size() && Java.size()>Cel.size()){
                            resultado += "Desarrolladores Java \n";
                            for(String str : Java){
                                resultado += str + "\n";
                            }
                            System.out.println(resultado);
                        }
                        
                        else if(Cel.size()>Java.size() && Cel.size()>Web.size()){
                            resultado += "Desarrolladores celulares \n";
                            for(String str : Cel){
                                resultado += str + "\n";
                            }
                            System.out.println(resultado);
                        }
                        
                         System.out.println("El conjunto de desarrolladores mas grande en orden ascendente es:");
                        resultado = "";
                        if(Web.size()>Java.size() && Web.size()>Cel.size()){
                            resultado += "Desarrolladores Web \n";
                            System.out.println(resultado);
                            Object[] javaArray = Web.toArray();
                            java.util.Arrays.sort(javaArray);
                            System.out.print(Arrays.toString(javaArray));
                            
                        }
                        else if(Java.size()>Web.size() && Java.size()>Cel.size()){
                            resultado += "Desarrolladores Java \n";
                            System.out.println(resultado);
                            Object[] javaArray = Java.toArray();
                            java.util.Arrays.sort(javaArray);
                            System.out.print(Arrays.toString(javaArray));
                        }
                        
                        else if(Cel.size()>Java.size() && Cel.size()>Web.size()){
                            resultado += "Desarrolladores celulares \n";
                            System.out.println(resultado);
                            Object[] javaArray = Cel.toArray();
                            java.util.Arrays.sort(javaArray);
                            System.out.print(Arrays.toString(javaArray));
                        }
                        
                    }
                
                }
                
                
                
            }
            // Si se seleciono utilizar LinkedHashSet
            else if(elec==2){
                Set<String> Web = sFactory.getSet(elec);
                Set<String> Java = sFactory.getSet(elec);
                Set<String> Cel = sFactory.getSet(elec);
                
                
                while(submenu != 5){
                    System.out.println("Ingrese la opcion que desea realizar");
                    System.out.println("1. Agregar usuario a Desarrollador Web");
                    System.out.println("2. Agregar usuario a Desarrollador Java");
                    System.out.println("3. Agregar usuario a Desarrollador Celulares");
                    System.out.println("4. Mostrar Resultados");
                    System.out.println("5. Salir");

                    submenu = sc.nextInt();
                    sc.nextLine();
                    if(submenu == 1){
                        //Ingresar un desarrollador web
                        System.out.println("Ingrese el nombre del usuario");
                        usuario = sc.nextLine();
                        Web.add(usuario);
                    }
                    //Ingresar un desarrollador java
                    else if(submenu == 2){
                        System.out.println("Ingrese el nombre del usuario");
                        usuario = sc.nextLine();
                        Java.add(usuario);
                    }
                    //Ingresar un desarrollador de celulares
                    else if(submenu == 3){
                        System.out.println("Ingrese el nombre del usuario");
                        usuario = sc.nextLine();
                        Cel.add(usuario);
                    }
                    //Mostrar los resultados
                    else if(submenu == 4){
                        System.out.println("Desarrolladores web, java y celulares");
                        for(String str : Web){
                            if(Java.contains(str) && Cel.contains(str)){
                                resultado += str + "\n";
                            }                        
                        }
                        System.out.println(resultado);
                        
                        System.out.println("Desarrolladores con experiencia en java, sin experiencia en web");
                        resultado = "";
                        for(String str : Java){
                            if(Web.contains(str)==false){
                                resultado += str + "\n";
                            }                        
                        }
                        System.out.println(resultado);
                        
                        System.out.println("Desarrolladores con experiencia en web y celulares");
                        resultado = "";
                        for(String str : Web){
                            if(Cel.contains(str)){
                                resultado += str + "\n";
                            }                        
                        }
                        System.out.println(resultado);
                        
                        System.out.println("Desarrolladores con experiencia web o celulares y sin experiencia en java");
                        resultado = "";
                        for(String str : Web){
                            if(Java.contains(str)==false){
                                resultado += str + "\n";
                            }                        
                        }
                        for(String str : Cel){
                            if(Java.contains(str)==false){
                                resultado += str + "\n";
                            }
                        }
                        System.out.println(resultado);
                        
                        if(Web.containsAll(Java)){
                            System.out.println("El conjunto de desarrolladores de Java es un subconjunto de los desarrolladores Web");
                        }
                        else{
                            System.out.println("El conjunto de desarrolladores de Java no es un subconjunto de los desarrolladores Web");
                        }
                        
                        System.out.println("El conjunto de desarrolladores mas grande es:");
                        resultado = "";
                        if(Web.size()>Java.size() && Web.size()>Cel.size()){
                            resultado += "Desarrolladores Web \n";
                            for(String str : Web){
                                resultado += str + "\n";
                            }
                            System.out.println(resultado);
                        }
                        else if(Java.size()>Web.size() && Java.size()>Cel.size()){
                            resultado += "Desarrolladores Java \n";
                            for(String str : Java){
                                resultado += str + "\n";
                            }
                            System.out.println(resultado);
                        }
                        
                        else if(Cel.size()>Java.size() && Cel.size()>Web.size()){
                            resultado += "Desarrolladores celulares \n";
                            for(String str : Cel){
                                resultado += str + "\n";
                            }
                            System.out.println(resultado);
                        }
                        
                         System.out.println("El conjunto de desarrolladores mas grande en orden ascendente es:");
                        resultado = "";
                        if(Web.size()>Java.size() && Web.size()>Cel.size()){
                            resultado += "Desarrolladores Web \n";
                            System.out.println(resultado);
                            Object[] javaArray = Web.toArray();
                            java.util.Arrays.sort(javaArray);
                            System.out.print(Arrays.toString(javaArray));
                            
                        }
                        else if(Java.size()>Web.size() && Java.size()>Cel.size()){
                            resultado += "Desarrolladores Java \n";
                            System.out.println(resultado);
                            Object[] javaArray = Java.toArray();
                            java.util.Arrays.sort(javaArray);
                            System.out.print(Arrays.toString(javaArray));
                        }
                        
                        else if(Cel.size()>Java.size() && Cel.size()>Web.size()){
                            resultado += "Desarrolladores celulares \n";
                            System.out.println(resultado);
                            Object[] javaArray = Cel.toArray();
                            java.util.Arrays.sort(javaArray);
                            System.out.print(Arrays.toString(javaArray));
                        }
                        
                    }
                
                }
                
                
                
            }
            //Si se selecciono TreeSet
            else if(elec==3){
                Set<String> Web = sFactory.getSet(elec);
                Set<String> Java = sFactory.getSet(elec);
                Set<String> Cel = sFactory.getSet(elec);
                
                
                while(submenu != 5){
                    System.out.println("Ingrese la opcion que desea realizar");
                    System.out.println("1. Agregar usuario a Desarrollador Web");
                    System.out.println("2. Agregar usuario a Desarrollador Java");
                    System.out.println("3. Agregar usuario a Desarrollador Celulares");
                    System.out.println("4. Mostrar Resultados");
                    System.out.println("5. Salir");

                    submenu = sc.nextInt();
                    sc.nextLine();
                    //Ingresar un desarrollador web
                    if(submenu == 1){
                        System.out.println("Ingrese el nombre del usuario");
                        usuario = sc.nextLine();
                        Web.add(usuario);
                    }
                    //Ingresar un desarrollador java
                    else if(submenu == 2){
                        System.out.println("Ingrese el nombre del usuario");
                        usuario = sc.nextLine();
                        Java.add(usuario);
                    }
                    //Ingresar un desarrollador de celulares
                    else if(submenu == 3){
                        System.out.println("Ingrese el nombre del usuario");
                        usuario = sc.nextLine();
                        Cel.add(usuario);
                    }
                    //Mostrar los resultados
                    else if(submenu == 4){
                        System.out.println("Desarrolladores web, java y celulares");
                        for(String str : Web){
                            if(Java.contains(str) && Cel.contains(str)){
                                resultado += str + "\n";
                            }                        
                        }
                        System.out.println(resultado);
                        
                        System.out.println("Desarrolladores con experiencia en java, sin experiencia en web");
                        resultado = "";
                        for(String str : Java){
                            if(Web.contains(str)==false){
                                resultado += str + "\n";
                            }                        
                        }
                        System.out.println(resultado);
                        
                        System.out.println("Desarrolladores con experiencia en web y celulares");
                        resultado = "";
                        for(String str : Web){
                            if(Cel.contains(str)){
                                resultado += str + "\n";
                            }                        
                        }
                        System.out.println(resultado);
                        
                        System.out.println("Desarrolladores con experiencia web o celulares y sin experiencia en java");
                        resultado = "";
                        for(String str : Web){
                            if(Java.contains(str)==false){
                                resultado += str + "\n";
                            }                        
                        }
                        for(String str : Cel){
                            if(Java.contains(str)==false){
                                resultado += str + "\n";
                            }
                        }
                        System.out.println(resultado);
                        
                        if(Web.containsAll(Java)){
                            System.out.println("El conjunto de desarrolladores de Java es un subconjunto de los desarrolladores Web");
                        }
                        else{
                            System.out.println("El conjunto de desarrolladores de Java no es un subconjunto de los desarrolladores Web");
                        }
                        
                        System.out.println("El conjunto de desarrolladores mas grande es:");
                        resultado = "";
                        if(Web.size()>Java.size() && Web.size()>Cel.size()){
                            resultado += "Desarrolladores Web \n";
                            for(String str : Web){
                                resultado += str + "\n";
                            }
                            System.out.println(resultado);
                        }
                        else if(Java.size()>Web.size() && Java.size()>Cel.size()){
                            resultado += "Desarrolladores Java \n";
                            for(String str : Java){
                                resultado += str + "\n";
                            }
                            System.out.println(resultado);
                        }
                        
                        else if(Cel.size()>Java.size() && Cel.size()>Web.size()){
                            resultado += "Desarrolladores celulares \n";
                            for(String str : Cel){
                                resultado += str + "\n";
                            }
                            System.out.println(resultado);
                        }
                        
                         System.out.println("El conjunto de desarrolladores mas grande en orden ascendente es:");
                        resultado = "";
                        if(Web.size()>Java.size() && Web.size()>Cel.size()){
                            resultado += "Desarrolladores Web \n";
                            System.out.println(resultado);
                            Object[] javaArray = Web.toArray();
                            java.util.Arrays.sort(javaArray);
                            System.out.print(Arrays.toString(javaArray));
                            
                        }
                        else if(Java.size()>Web.size() && Java.size()>Cel.size()){
                            resultado += "Desarrolladores Java \n";
                            System.out.println(resultado);
                            Object[] javaArray = Java.toArray();
                            java.util.Arrays.sort(javaArray);
                            System.out.print(Arrays.toString(javaArray));
                        }
                        
                        else if(Cel.size()>Java.size() && Cel.size()>Web.size()){
                            resultado += "Desarrolladores celulares \n";
                            System.out.println(resultado);
                            Object[] javaArray = Cel.toArray();
                            java.util.Arrays.sort(javaArray);
                            System.out.print(Arrays.toString(javaArray));
                        }
                        
                    }
                
                }
                
                
                
            }
        }
        
        
    }
}
